package win.bitterwine.BasicService;

import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2017/6/20.
 */
public interface BasicService {
    /**
     * 根据id获取
     */
    public <T> Object findById(Class<T> cls, long id);
    /**
     * 插入一条数据
     */
    public long save(Class<?> cls, Map<String, Object> fieldMap);
    /**
     * 插入一个实体
     */
    public long save(Object entity);
    /**
     * 根据id修改
     */
    public boolean update(Class<?> cls, long id, Map<String, Object> fieldMap);
    /**
     * 更新相关数据
     */
    public boolean update(Class<?> entityClass, Map<String, Object> fieldMap, String condition, Object... params);
    /**
     * 删除根据id
     */
    public boolean delete(Class<?> cls, long id);
    public boolean delete(Class<?> entityClass, String condition, Object... params);

    /**
     * 查询单条数据，并转为相应类型的实体
     */
    public <T> T selectOneObj(Class<T> entityClass, String condition, Object... params);
    /**
     * 查询多条数据，并转为相应类型的实体列表
     */
    public <T> List<T> selectList(Class<T> entityClass);
    /**
     * 查询多条数据，并转为相应类型的实体列表（带有查询条件与查询参数）
     */
    public <T> List<T> selectListWithCondition(Class<T> entityClass, String condition, Object... params);
    /**
     * 查询多条数据，并转为相应类型的实体列表（带有排序方式）
     */
    public <T> List<T> selectListWithSort(Class<T> entityClass, String sort);
    /**
     * 查询多条数据，并转为相应类型的实体列表（带有查询条件、排序方式与查询参数）
     */
    public <T> List<T> selectListWithConditionAndSort(Class<T> entityClass, String condition, String sort, Object... params);
    /**
     * 查询数据条数
     */
    public long selectCount(Class<?> entityClass, String condition, Object... params);
    /**
     * 查询数据条数
     */
    public long selectCount(Class<?> entityClass);
    /**
     * 查询多条数据，并转为列表（分页方式）
     */
    public <T> List<T> selectListForPager(int pageNumber, int pageSize, Class<T> entityClass, String condition, String sort, Object... params);
    /**
     * 查询多条数据，并转为列表（分页方式）
     */
    public <T> List<T> selectListForPager(int pageNumber, int pageSize, Class<T> entityClass, String condition, Object... params);
    /**
     * 查询多条数据，并转为列表（分页方式）
     */
    public <T> List<T> selectListForPager(int pageNumber, int pageSize, Class<T> entityClass);
    /**
     * 查询多条数据，并转为映射 (返回map集合,key为数据的id)
     */
    public <T> Map<Long, T> selectMap(Class<T> entityClass);
    /**
     * 查询多条数据，并转为映射（带有查询条件与查询参数）
     */
    public <T> Map<Long, T> selectMapWithCondition(Class<T> entityClass, String condition, Object... params);
    /**
     * 查询多条数据，并转为映射（带有查询条件、排序方式与查询参数）
     */
    public <T> Map<Long, T> selectMapWithConditionAndSort(Class<T> entityClass, String condition, String sort, Object... params);
}
